<!DOCTYPE html>
<html lang="en">
  <head>
    <title>PredicateFlow  Reference</title>
    <link rel="stylesheet" type="text/css" href="css/jazzy.css" />
    <link rel="stylesheet" type="text/css" href="css/highlight.css" />
    <meta charset="utf-8">
    <script src="js/jquery.min.js" defer></script>
    <script src="js/jazzy.js" defer></script>
    
    <script src="js/lunr.min.js" defer></script>
    <script src="js/typeahead.jquery.js" defer></script>
    <script src="js/jazzy.search.js" defer></script>
  </head>
  <body>


    <a title="PredicateFlow  Reference"></a>

    <header class="header">
      <p class="header-col header-col--primary">
        <a class="header-link" href="index.html">
          PredicateFlow 1.5 Docs
        </a>
         (77% documented)
      </p>
    
      <p class="header-col--secondary">
        <form role="search" action="search.json">
          <input type="text" placeholder="Search documentation" data-typeahead>
        </form>
      </p>
    
        <p class="header-col header-col--secondary">
          <a class="header-link" href="https://github.com/andreadelfante/PredicateFlow">
            <img class="header-icon" src="img/gh.png"/>
            View on GitHub
          </a>
        </p>
    
        <p class="header-col header-col--secondary">
          <a class="header-link" href="dash-feed://https%3A%2F%2Fandreadelfante.github.io%2FPredicateFlow%2Fdocsets%2FPredicateFlow.xml">
            <img class="header-icon" src="img/dash.png"/>
            Install in Dash
          </a>
        </p>
    </header>

    <p class="breadcrumbs">
      <a class="breadcrumb" href="index.html">PredicateFlow Reference</a>
      <img class="carat" src="img/carat.png" />
      PredicateFlow  Reference
    </p>

    <div class="content-wrapper">
      <nav class="navigation">
        <ul class="nav-groups">
          <li class="nav-group-name">
            <a class="nav-group-name-link" href="Classes.html">Classes</a>
            <ul class="nav-group-tasks">
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Classes/BasicComparisonQuery.html">BasicComparisonQuery</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Classes/BoolPredicateProperty.html">BoolPredicateProperty</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Classes/CollectionProperty.html">CollectionProperty</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Classes.html#/s:13PredicateFlow20CompoundFieldBuilderC">CompoundFieldBuilder</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Classes/CompoundablePredicateField.html">CompoundablePredicateField</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Classes/ObjectProperty.html">ObjectProperty</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Classes/PredicateBuilder.html">PredicateBuilder</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Classes/PredicateProperty.html">PredicateProperty</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Classes/StringComparisonQuery.html">StringComparisonQuery</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Classes/StringPredicateProperty.html">StringPredicateProperty</a>
              </li>
            </ul>
          </li>
          <li class="nav-group-name">
            <a class="nav-group-name-link" href="Enums.html">Enumerations</a>
            <ul class="nav-group-tasks">
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Enums/StringComparisonOption.html">StringComparisonOption</a>
              </li>
            </ul>
          </li>
          <li class="nav-group-name">
            <a class="nav-group-name-link" href="Extensions.html">Extensions</a>
            <ul class="nav-group-tasks">
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Extensions/LinkingObjects.html">LinkingObjects</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Extensions/List.html">List</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Extensions/Results.html">Results</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Extensions/SortDescriptor.html">SortDescriptor</a>
              </li>
            </ul>
          </li>
          <li class="nav-group-name">
            <a class="nav-group-name-link" href="Protocols.html">Protocols</a>
            <ul class="nav-group-tasks">
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Protocols/CompoundablePredicate.html">CompoundablePredicate</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Protocols/CompoundablePredicateResult.html">CompoundablePredicateResult</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Protocols/FlowComparable.html">FlowComparable</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Protocols/FlowEquatable.html">FlowEquatable</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Protocols/FlowNillable.html">FlowNillable</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Protocols/FlowStringComparable.html">FlowStringComparable</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Protocols/GeneratedPredicateSchema.html">GeneratedPredicateSchema</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Protocols/GroupingPredicate.html">GroupingPredicate</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Protocols/PredicateField.html">PredicateField</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Protocols/PredicatePropertyBuilder.html">PredicatePropertyBuilder</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Protocols/PredicateQuery.html">PredicateQuery</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Protocols/PredicateResult.html">PredicateResult</a>
              </li>
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Protocols.html#/s:13PredicateFlow0A6SchemaP">PredicateSchema</a>
              </li>
            </ul>
          </li>
          <li class="nav-group-name">
            <a class="nav-group-name-link" href="Structs.html">Structures</a>
            <ul class="nav-group-tasks">
              <li class="nav-group-task">
                <a class="nav-group-task-link" href="Structs/SubqueryProperty.html">SubqueryProperty</a>
              </li>
            </ul>
          </li>
        </ul>
      </nav>
      <article class="main-content">

        <section class="section">
          <div class="section-content top-matter">
            
            <h1 id='predicateflow' class='heading'>PredicateFlow</h1>

<p><a href="https://travis-ci.org/andreadelfante/PredicateFlow"><img src="https://travis-ci.org/andreadelfante/PredicateFlow.svg?branch=master" alt="Build Status"></a>
<a href="https://cocoapods.org/pods/PredicateFlow"><img src="https://img.shields.io/cocoapods/v/PredicateFlow.svg" alt="CocoaPods Compatible"></a>
<img src="https://img.shields.io/cocoapods/p/PredicateFlow.svg?style=flat" alt="Platform">
<a href="https://github.com/dwyl/esta/issues"><img src="https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat" alt="contributions welcome"></a>
<img src="https://img.shields.io/cocoapods/l/PredicateFlow.svg?style=flat" alt="License"></p>

<p>Write amazing, strong-typed and easy-to-read NSPredicate. This library allows you to write flowable NSPredicate, without guessing attribution names, predicate operation or writing wrong arguments type.</p>
<h2 id='supported-platforms' class='heading'>Supported platforms</h2>

<ul>
<li>iOS 9.0+</li>
<li>macOS 10.9+</li>
<li>tvOS 9.0+</li>
<li>watchOS 2.0+</li>
</ul>
<h2 id='installation' class='heading'>Installation</h2>

<p><a href="http://cocoapods.org">CocoaPods</a> is actually the only way to install it.</p>
<h3 id='cocoapods' class='heading'>Cocoapods</h3>

<blockquote>
<p>CocoaPods 0.39.0+ is required to build this library</p>
</blockquote>

<ol>
<li>Add <code>pod &#39;PredicateFlow&#39;</code> to your <a href="http://cocoapods.org/#get_started">Podfile</a> and run <code>pod install</code></li>
<li>In Xcode, click on your project in the file list, choose your target under <code>TARGETS</code>, click the <code>Build Phases</code> tab and add a <code>New Run Script Phase</code> by clicking the plus icon in the top left</li>
<li>Drag the new <code>Run Script</code> phase <strong>above</strong> the <code>Compile Sources</code> phase and <strong>below</strong> <code>Check Pods Manifest.lock</code>, expand it and paste the following script:<br>
<code>
&quot;$PODS_ROOT/Sourcery/bin/sourcery&quot; --sources &quot;$PODS_ROOT/PredicateFlow/PredicateFlow/Classes/Utils/&quot; --sources &quot;$SRCROOT&quot; --templates &quot;$PODS_ROOT/PredicateFlow/PredicateFlow/Templates/PredicateFlow.stencil&quot; --output &quot;$SRCROOT/PredicateFlow.generated.swift&quot;
</code></li>
</ol>

<p>In case you are using <strong>PredicateFlow-Realm</strong>, past the following  script instead of the above one:</p>
<pre class="highlight plaintext"><code>   "$PODS_ROOT/Sourcery/bin/sourcery" --sources "$PODS_ROOT/PredicateFlow/PredicateFlow/Classes/Utils/" --sources "$SRCROOT"  --sources "$PODS_ROOT/RealmSwift" --templates "$PODS_ROOT/PredicateFlow/PredicateFlow/Templates/PredicateFlow-Realm.stencil" --output "$SRCROOT/PredicateFlow.generated.swift"
</code></pre>

<p>For Xcode 10 only, add a new <code>Output Files</code> and paste the following:</p>
<pre class="highlight plaintext"><code>   $SRCROOT/PredicateFlow.generated.swift
</code></pre>

<ol>
<li>Build your project. In Finder you will now see a <code>PredicateFlow.generated.swift</code> in the <code>$SRCROOT</code>-folder, drag the <code>PredicateFlow.generated.swift</code> files into your project and <strong>uncheck</strong> <code>Copy items if needed</code></li>
</ol>

<p><em>Tip:</em> Add the <code>*.generated.swift</code> pattern to your <code>.gitignore</code> file to prevent unnecessary conflicts.</p>
<h2 id='usage' class='heading'>Usage</h2>

<p>Define a class/struct with its own attributes, which implements <code><a href="Protocols.html#/s:13PredicateFlow0A6SchemaP">PredicateSchema</a></code>:</p>
<pre class="highlight swift"><code><span class="kd">import</span> <span class="kt">PredicateFlow</span>

<span class="kd">class</span> <span class="kt">Dog</span><span class="p">:</span> <span class="kt">PredicateSchema</span> <span class="p">{</span>

    <span class="kd">private</span> <span class="k">var</span> <span class="nv">name</span><span class="p">:</span> <span class="kt">String</span> <span class="o">=</span> <span class="s">""</span>
    <span class="kd">private</span> <span class="k">var</span> <span class="nv">age</span><span class="p">:</span> <span class="kt">Int</span> <span class="o">=</span> <span class="mi">0</span>
    <span class="kd">private</span> <span class="k">var</span> <span class="nv">isHungry</span><span class="p">:</span> <span class="kt">Bool</span> <span class="o">=</span> <span class="kc">false</span>
    <span class="kd">private</span> <span class="k">var</span> <span class="nv">owner</span><span class="p">:</span> <span class="kt">Person</span><span class="p">?</span>
<span class="p">}</span>

<span class="kd">class</span> <span class="kt">Person</span><span class="p">:</span> <span class="kt">PredicateSchema</span> <span class="p">{</span>

    <span class="kd">enum</span> <span class="kt">Sex</span> <span class="p">{</span>
        <span class="k">case</span> <span class="n">male</span>
        <span class="k">case</span> <span class="n">female</span>
    <span class="p">}</span>

    <span class="kd">private</span> <span class="k">var</span> <span class="nv">name</span><span class="p">:</span> <span class="kt">String</span> <span class="o">=</span> <span class="s">""</span>
    <span class="kd">private</span> <span class="k">var</span> <span class="nv">birth</span><span class="p">:</span> <span class="kt">Date</span><span class="p">?</span>
    <span class="kd">private</span> <span class="k">var</span> <span class="nv">sex</span><span class="p">:</span> <span class="kt">Sex</span><span class="o">!</span>
    <span class="kd">private</span> <span class="k">var</span> <span class="nv">dogs</span><span class="p">:</span> <span class="p">[</span><span class="kt">Dog</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
<span class="p">}</span>
</code></pre>

<p>Build the project. PredicateFlow will autogenerate attributes references to build predicates, putting them in structures.</p>
<pre class="highlight swift"><code><span class="c1">// Generated using Sourcery 0.10.0 — https://github.com/krzysztofzablocki/Sourcery</span>
<span class="c1">// DO NOT EDIT</span>


<span class="kd">import</span> <span class="kt">PredicateFlow</span>

<span class="c1">/// The "Dog" Predicate Schema</span>
<span class="kd">internal</span> <span class="kd">struct</span> <span class="kt">DogSchema</span><span class="p">:</span> <span class="kt">GeneratedPredicateSchema</span> <span class="p">{</span>
    <span class="kd">private</span> <span class="k">var</span> <span class="nv">compoundFieldBuilder</span><span class="p">:</span> <span class="kt">CompoundFieldBuilder</span>

    <span class="c1">/// DO NOT USE THIS INIT DIRECTLY!</span>
    <span class="kd">internal</span> <span class="nf">init</span><span class="p">(</span><span class="nv">compoundFieldBuilder</span><span class="p">:</span> <span class="kt">CompoundFieldBuilder</span><span class="p">)</span> <span class="p">{</span>
        <span class="k">self</span><span class="o">.</span><span class="n">compoundFieldBuilder</span> <span class="o">=</span> <span class="n">compoundFieldBuilder</span>
    <span class="p">}</span>

    <span class="c1">/// "name" property</span>
    <span class="kd">internal</span> <span class="k">var</span> <span class="nv">name</span><span class="p">:</span> <span class="kt">StringPredicateProperty</span> <span class="p">{</span> <span class="k">return</span> <span class="n">builder</span><span class="o">.</span><span class="nf">string</span><span class="p">(</span><span class="s">"name"</span><span class="p">)</span> <span class="p">}</span>
    <span class="c1">/// "name" property for static access</span>
    <span class="kd">internal</span> <span class="kd">static</span> <span class="k">var</span> <span class="nv">name</span><span class="p">:</span> <span class="kt">StringPredicateProperty</span> <span class="p">{</span> <span class="k">return</span> <span class="kt">DogSchema</span><span class="p">()</span><span class="o">.</span><span class="n">name</span> <span class="p">}</span>

    <span class="c1">// Other properties of Dog class autogenerated...</span>
<span class="p">}</span>
<span class="c1">/// The "Person" Predicate Schema</span>
<span class="kd">internal</span> <span class="kd">struct</span> <span class="kt">PersonSchema</span><span class="p">:</span> <span class="kt">GeneratedPredicateSchema</span> <span class="p">{</span>
    <span class="kd">private</span> <span class="k">var</span> <span class="nv">compoundFieldBuilder</span><span class="p">:</span> <span class="kt">CompoundFieldBuilder</span>

    <span class="c1">/// DO NOT USE THIS INIT DIRECTLY!</span>
    <span class="kd">internal</span> <span class="nf">init</span><span class="p">(</span><span class="nv">compoundFieldBuilder</span><span class="p">:</span> <span class="kt">CompoundFieldBuilder</span><span class="p">)</span> <span class="p">{</span>
        <span class="k">self</span><span class="o">.</span><span class="n">compoundFieldBuilder</span> <span class="o">=</span> <span class="n">compoundFieldBuilder</span>
    <span class="p">}</span>

    <span class="c1">/// "name" property</span>
    <span class="kd">internal</span> <span class="k">var</span> <span class="nv">name</span><span class="p">:</span> <span class="kt">StringPredicateProperty</span> <span class="p">{</span> <span class="k">return</span> <span class="n">builder</span><span class="o">.</span><span class="nf">string</span><span class="p">(</span><span class="s">"name"</span><span class="p">)</span> <span class="p">}</span>
    <span class="c1">/// "name" property for static access</span>
    <span class="kd">internal</span> <span class="kd">static</span> <span class="k">var</span> <span class="nv">name</span><span class="p">:</span> <span class="kt">StringPredicateProperty</span> <span class="p">{</span> <span class="k">return</span> <span class="kt">PersonSchema</span><span class="p">()</span><span class="o">.</span><span class="n">name</span> <span class="p">}</span>

    <span class="c1">// Other properties of Person class autogenerated...</span>
<span class="p">}</span>
</code></pre>

<p>To type a floawable NSPredicate, just write:</p>
<pre class="highlight swift"><code><span class="kt">DogSchema</span><span class="o">.</span><span class="n">age</span><span class="o">.</span><span class="nf">isEqual</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span><span class="o">.</span><span class="nf">query</span><span class="p">()</span>
<span class="c1">// or</span>
<span class="c1">// Vanilla mode: </span>
<span class="c1">// NSPredicate("age == %@", 10)</span>
</code></pre>

<p>You can also write compound predicate, and use deeper fields:</p>
<pre class="highlight swift"><code><span class="kt">PredicateBuilder</span><span class="p">(</span><span class="kt">DogSchema</span><span class="o">.</span><span class="n">age</span> <span class="o">&gt;</span> <span class="mi">10</span><span class="p">)</span>
    <span class="o">.</span><span class="nf">and</span><span class="p">(</span><span class="kt">DogSchema</span><span class="o">.</span><span class="n">isHungry</span><span class="o">.</span><span class="n">isTrue</span><span class="p">)</span>
    <span class="o">.</span><span class="nf">and</span><span class="p">(</span><span class="kt">DogSchema</span><span class="o">.</span><span class="n">age</span><span class="o">.</span><span class="nf">between</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">10</span><span class="p">))</span>
    <span class="o">.</span><span class="nf">and</span><span class="p">(</span><span class="kt">DogSchema</span><span class="o">.</span><span class="n">owner</span><span class="o">.</span><span class="nf">element</span><span class="p">()</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s">"Foo"</span><span class="p">)</span>
    <span class="o">.</span><span class="nf">or</span><span class="p">(</span><span class="kt">DogSchema</span><span class="o">.</span><span class="n">owner</span><span class="o">.</span><span class="nf">element</span><span class="p">()</span><span class="o">.</span><span class="n">dogs</span><span class="o">.</span><span class="nf">maxElements</span><span class="p">()</span><span class="o">.</span><span class="n">age</span> <span class="o">&gt;</span> <span class="mi">10</span><span class="p">)</span>
    <span class="o">.</span><span class="nf">or</span><span class="p">(</span><span class="kt">DogSchema</span><span class="o">.</span><span class="n">owner</span><span class="o">.</span><span class="nf">element</span><span class="p">()</span><span class="o">.</span><span class="n">dogs</span><span class="o">.</span><span class="nf">anyElements</span><span class="p">()</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s">"Foo"</span><span class="p">)</span>
    <span class="o">.</span><span class="nf">build</span><span class="p">()</span>

<span class="c1">// Vanilla mode: </span>
<span class="c1">// NSPredicate("age &gt; %@ AND isHungry == %@ AND age BETWEEN %@ AND owner.name == %@ OR owner.dogs.@max.age &gt; %@ OR ANY owner.dogs.name == %@", 10, true, [1, 10], "Foo", 10, "Foo")</span>
</code></pre>

<p>PredicateFlow can also build KeyPaths, and you can use it to get a strong-typed one.</p>
<pre class="highlight swift"><code><span class="kt">DogSchema</span><span class="o">.</span><span class="n">age</span><span class="o">.</span><span class="nf">keyPath</span><span class="p">()</span>
<span class="kt">DogSchema</span><span class="o">.</span><span class="n">owner</span><span class="o">.</span><span class="nf">element</span><span class="p">()</span><span class="o">.</span><span class="n">dogs</span><span class="o">.</span><span class="nf">keyPath</span><span class="p">()</span>

<span class="c1">// Vanilla mode:</span>
<span class="c1">// "age"</span>
<span class="c1">// "owner.dogs"</span>
</code></pre>
<h2 id='predicateflow-realm' class='heading'>PredicateFlow/Realm</h2>

<p>If you want to use flowable and strong-typed queries in <a href="https://github.com/realm/realm-cocoa">Realm</a>, add <strong>both</strong> <code>pod &#39;PredicateFlow&#39;</code> and <code>pod &#39;PredicateFlow/Realm&#39;</code> to your <a href="http://cocoapods.org/#get_started">Podfile</a> and run <code>pod install</code>.</p>
<pre class="highlight swift"><code><span class="k">let</span> <span class="nv">realm</span> <span class="o">=</span> <span class="k">try!</span> <span class="kt">Realm</span><span class="p">()</span>
<span class="n">realm</span><span class="o">.</span><span class="nf">objects</span><span class="p">(</span><span class="kt">Dog</span><span class="o">.</span><span class="k">self</span><span class="p">)</span>
    <span class="o">.</span><span class="nf">filter</span><span class="p">(</span><span class="kt">DogSchema</span><span class="o">.</span><span class="n">age</span><span class="o">.</span><span class="nf">isGreater</span><span class="p">(</span><span class="nv">than</span><span class="p">:</span> <span class="mi">10</span><span class="p">))</span>
    <span class="o">.</span><span class="nf">filter</span><span class="p">(</span><span class="kt">DogSchema</span><span class="o">.</span><span class="n">isHungry</span><span class="o">.</span><span class="n">isTrue</span><span class="p">)</span>
    <span class="o">.</span><span class="nf">sorted</span><span class="p">(</span><span class="kt">DogSchema</span><span class="o">.</span><span class="n">age</span><span class="o">.</span><span class="nf">ascending</span><span class="p">())</span>

<span class="c1">// Vanilla mode:</span>
<span class="n">realm</span><span class="o">.</span><span class="nf">objects</span><span class="p">(</span><span class="kt">Dog</span><span class="o">.</span><span class="k">self</span><span class="p">)</span>
    <span class="o">.</span><span class="nf">filter</span><span class="p">(</span><span class="s">"age &gt; %@"</span><span class="p">,</span> <span class="mi">10</span><span class="p">)</span>
    <span class="o">.</span><span class="nf">filter</span><span class="p">(</span><span class="s">"isHungry == %@"</span><span class="p">,</span> <span class="kc">true</span><span class="p">)</span>
    <span class="o">.</span><span class="nf">sorted</span><span class="p">(</span><span class="s">"age"</span><span class="p">,</span> <span class="nv">ascending</span><span class="p">:</span> <span class="kc">true</span><span class="p">)</span>
</code></pre>
<h2 id='contributing' class='heading'>Contributing</h2>

<p>PredicateFlow is an open source project, so feel free to contribute.
You can open an issue for problems or suggestions, and you can propose your own fixes by opening a pull request with the changes.</p>
<h2 id='license' class='heading'>License</h2>

<p>PredicateFlow is available under the MIT license. See the LICENSE file for more info.</p>
<h2 id='attributions' class='heading'>Attributions</h2>

<p>This library is powered by <a href="https://github.com/krzysztofzablocki/Sourcery">Sourcery</a>.</p>
<h2 id='author' class='heading'>Author</h2>

<p>Andrea Del Fante, <a href="mailto:andreadelfante94@gmail.com">andreadelfante94@gmail.com</a></p>

          </div>
        </section>


      </article>
    </div>
    <section class="footer">
      <p>&copy; 2020 <a class="link" href="https://twitter.com/a_delfante" target="_blank" rel="external">andreadelfante</a>. All rights reserved. (Last updated: 2020-12-10)</p>
      <p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external">jazzy ♪♫ v0.13.6</a>, a <a class="link" href="https://realm.io" target="_blank" rel="external">Realm</a> project.</p>
    </section>
  </body>
</div>
</html>
